Modifizieren Sie das in der Version cont7 beschriebene Programm in der Weise, dass Sie anstatt der Klasse TCont eine Template-Klasse
template <class T> class Cont { ... }
vereinbaren, die mit einem beliebigen Datentyp T arbeitet. Beachten Sie, dass die Implementierung einer Template-Klasse für den Compiler sichtbar sein muss, wenn ein Objekt der Klasse erzeugt wird (wie im Testprogramm). Deshalb müssen nicht nur die Deklarationen, sondern auch die Definitionen sämtlicher Element-Funktionen in der Header-Datei contarr.hpp untergebracht werden. Speichern Sie das (minimal veränderte) Testprogramm unter dem Namen contt.cpp.
Achtung: Sowohl bei BC 3.1 als auch bei Visual C++ 6.0 / 7.0 (.NET) müssen die Elementfunktionen der verschachtelten Klasse iterator innerhalb der Klassendeklaration definiert werden und werden damit automatisch zu inline-Funktionen. Wird dagegen verstoßen, kommt es zu Compiler- bzw. Linker-Fehlern. Auch die nachträgliche Definition der Elementfunktionen (außerhalb der Klassendeklaration) unter Verwendung des Schlüsselworts inline führt nicht zum Ziel! Diese Compiler entsprechen in diesem Punkt nicht dem C++ ANSI-Standard. Die Entwicklungsumgebung "Visual Studio .NET 2003" verhält sich hier endlich korrekt! |
Das Programm entsteht also aus den folgenden Dateien:
t.h | deklariert T und die I/O-Funktionen für T |
intio.c | definiert die I/O-Funktionen für T == int |
conarr.hpp | deklariert und implementiert die Template-Klasse Cont |
cont.cpp | Testprogramm |